/**
 * @file TestFun.h
 * @author shikang999@126.com
 * @brief 这个模块主要统一初始化多个测试函数
 * @version 0.1
 * @date 2025-06-20
 * 
 * @copyright Copyright (c) 2025
 * 
 */

#pragma once
#include "BaseFun.h"
namespace Solver
{
class Test
{
public:
    Test();
    ~Test();

    //初始化函数
    static std::shared_ptr<BaseFun> getFun(FunType_E type, std::size_t dim = 1000);

    //初始化函数,如果函数变量维度可变动,则维度设置为dim
    static vecBaseFun_t getFuns(const vecFunType_t funTypes, std::size_t dim = 1000);

private:
    static mapFun_t getFunMap();
    static std::shared_ptr<BaseFun> initFunByEasyAny_1(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByHard5_1(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F1(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F2(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F3(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F4(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F5(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F6(std::size_t dim);
    static std::shared_ptr<BaseFun> initFunByCEC2017_F9(std::size_t dim);

    static std::shared_ptr<BaseFun> initFunByNIST_Gauss3(std::size_t dim);

};
}